package org.zhq.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.zhq.pojo.Items;
import org.zhq.pojo.ItemsImg;
import org.zhq.pojo.ItemsParam;
import org.zhq.pojo.ItemsSpec;
import org.zhq.pojo.vo.CommentLevelCountsVO;
import org.zhq.pojo.vo.ItemCommentVO;
import org.zhq.pojo.vo.SearchItemsVO;
import org.zhq.pojo.vo.ShopCartVO;

import java.util.List;

public interface ItemsService {
    /**
     * 根据商品id查询详情
     * @param itemId
     * @return
     */
    Items queryItemsById(String itemId);

    /**
     * 根据商品id查询商品图片列表
     * @param itemId
     * @return
     */
    List<ItemsImg> queryItemsImgList(String itemId);

    /**
     * 根据商品id查询商品规格
     * @param itemId
     * @return
     */
    List<ItemsSpec> queryItemsSpecList(String itemId);

    /**
     * 根据商品id查询商品参数
     * @param itemId
     * @return
     */
    ItemsParam queryItemsParam(String itemId);

    /**
     * 根据商品id查询商品的评价等级数量
     * @param itemId
     * @return
     */
    CommentLevelCountsVO queryCommentCounts(String itemId);


    /**
     * 根据商品id 评价级别 分页信息 查询商品的评价列表
     * @param itemId
     * @param level
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<ItemCommentVO> queryPagedComments(String itemId, Integer level, Integer pageNo, Integer pageSize);

    /**
     * 根据关键词 排序方式 分页信息 查询商品列表
     * @param keywords
     * @param sort
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<SearchItemsVO> searchItems(String keywords, String sort, Integer pageNo, Integer pageSize);

    /**
     * 根据分类id 排序方式 分页信息 查询商品列表
     * @param catId
     * @param sort
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<SearchItemsVO> searchItemsByThirdCat(Integer catId, String sort, Integer pageNo, Integer pageSize);

    /**
     * 根据规格ids 查询商品规格信息列表
     * @param specIds
     * @return
     */
    List<ItemsSpec> queryItemSpecListByIds(List<String>specIds);

    /**
     * 根据规格id 查询商品规格信息
     * @param specId
     * @return
     */
    ItemsSpec queryItemSpecById(String specId);

    /**
     * 根据商品id获取商品图片主图
     * @param itemId
     * @return
     */
    String queryItemMainImgById(String itemId);

    /**
     * 减少库存
     * @param specId
     * @param buyCounts
     */
    void decreaseItemSpecStock(String specId,int buyCounts);
}
